package thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 线程池：
 * 1.是多线程应用中的一种资源管理技术
 * 2.作用：减少创建和销毁线程的开销，并限制并发线程的数量
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        //创建一个固定大小为3的线程池，此线程池同时执行最多3个任务
        ExecutorService service = Executors.newFixedThreadPool(3);
        for (int i = 0; i < 5; i++) {
            Runnable runnable = new Runnable() {
                //1.定义一个线程任务
                public void run() {
                    Thread t = Thread.currentThread();
                    System.out.println(t.getName()+"正在执行任务...");
                    try {
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                    }
                    System.out.println(t.getName()+"任务执行完毕");
                }
            };
            //2.将线程任务交给线程池
            service.execute(runnable);
            System.out.println("交给线程池一个任务");
        }
        service.shutdown();  //关闭线程池，表示不再接受新任务，但会继续处理已提交的任务直到他们执行完毕
        //  service.shutdownNow();  //立即关闭线程池，会停止所以有正在执行的任务---不推荐
        System.out.println("线程池已关闭");
    }
}
